]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st: Set I-beam cursor on StEntry through Clutter API
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 5 Nov 2025 12:26:40 +0000 (13:26 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 19 Jan 2026 09:33:30 +0000 (09:33 +0000)
This also means we can drop the special shell hooks to actually
set a cursor with MetaDisplay API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3952>

src/shell-global.c
src/st/st-entry.c
src/st/st-entry.h

index 95f4f36791f24e20f8f4307588f5a0cb42ce54c4..4291bb94f922c8f5792d71bf295aefbc4458ee5b 100644 (file)
@@ -955,17 +955,6 @@ ui_scaling_factor_changed (MetaSettings *settings,
   update_scaling_factor (global, settings);
 }
 
-static void
-entry_cursor_func (StEntry  *entry,
-                   gboolean  use_ibeam,
-                   gpointer  user_data)
-{
-  ShellGlobal *global = user_data;
-
-  meta_display_set_cursor (global->meta_display,
-                           use_ibeam ? META_CURSOR_TEXT : META_CURSOR_DEFAULT);
-}
-
 #ifdef HAVE_XWAYLAND
 static void
 on_x11_display_closed (MetaDisplay *display,
@@ -1004,7 +993,6 @@ _shell_global_set_plugin (ShellGlobal *global,
 
   global->stage = CLUTTER_STAGE (meta_backend_get_stage (global->backend));
 
-  st_entry_set_cursor_func (entry_cursor_func, global);
   st_clipboard_set_selection (meta_display_get_selection (display));
 
   g_signal_connect (global->stage, "notify::width",
index e3a4b537f7a2c19bf7f6ce65899ca900c0fde51b..25e179bfe84f02ea89f50042f725fa32a3dea551 100644 (file)
@@ -103,8 +103,6 @@ struct _StEntryPrivate
 
   gfloat        spacing;
 
-  gboolean      has_ibeam;
-
   StShadow     *shadow_spec;
 
   CoglPipeline *text_shadow_pipeline;
@@ -776,60 +774,6 @@ st_entry_key_focus_in (ClutterActor *actor)
   clutter_actor_grab_key_focus (priv->entry);
 }
 
-static StEntryCursorFunc cursor_func = NULL;
-static gpointer          cursor_func_data = NULL;
-
-/**
- * st_entry_set_cursor_func: (skip)
- *
- * This function is for private use by libgnome-shell.
- * Do not ever use.
- */
-void
-st_entry_set_cursor_func (StEntryCursorFunc func,
-                          gpointer          data)
-{
-  cursor_func = func;
-  cursor_func_data = data;
-}
-
-static void
-st_entry_set_cursor (StEntry  *entry,
-                     gboolean  use_ibeam)
-{
-  if (cursor_func)
-    cursor_func (entry, use_ibeam, cursor_func_data);
-
-  ((StEntryPrivate *)ST_ENTRY_PRIV (entry))->has_ibeam = use_ibeam;
-}
-
-static gboolean
-st_entry_enter_event (ClutterActor *actor,
-                      ClutterEvent *event)
-{
-  StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
-  ClutterStage *stage;
-  ClutterActor *target;
-
-  stage = CLUTTER_STAGE (clutter_actor_get_stage (actor));
-  target = clutter_stage_get_event_actor (stage, event);
-
-  if (target == priv->entry &&
-      clutter_event_get_related (event) != NULL)
-    st_entry_set_cursor (ST_ENTRY (actor), TRUE);
-
-  return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->enter_event (actor, event);
-}
-
-static gboolean
-st_entry_leave_event (ClutterActor *actor,
-                      ClutterEvent *event)
-{
-  st_entry_set_cursor (ST_ENTRY (actor), FALSE);
-
-  return CLUTTER_ACTOR_CLASS (st_entry_parent_class)->leave_event (actor, event);
-}
-
 static void
 st_entry_paint_node (ClutterActor        *actor,
                      ClutterPaintNode    *node,
@@ -875,16 +819,6 @@ st_entry_paint_node (ClutterActor        *actor,
     }
 }
 
-static void
-st_entry_unmap (ClutterActor *actor)
-{
-  StEntryPrivate *priv = ST_ENTRY_PRIV (actor);
-  if (priv->has_ibeam)
-    st_entry_set_cursor (ST_ENTRY (actor), FALSE);
-
-  CLUTTER_ACTOR_CLASS (st_entry_parent_class)->unmap (actor);
-}
-
 static gboolean
 st_entry_get_paint_volume (ClutterActor       *actor,
                            ClutterPaintVolume *volume)
@@ -908,15 +842,11 @@ st_entry_class_init (StEntryClass *klass)
   actor_class->get_preferred_height = st_entry_get_preferred_height;
   actor_class->allocate = st_entry_allocate;
   actor_class->paint_node = st_entry_paint_node;
-  actor_class->unmap = st_entry_unmap;
   actor_class->get_paint_volume = st_entry_get_paint_volume;
 
   actor_class->key_press_event = st_entry_key_press_event;
   actor_class->key_focus_in = st_entry_key_focus_in;
 
-  actor_class->enter_event = st_entry_enter_event;
-  actor_class->leave_event = st_entry_leave_event;
-
   widget_class->style_changed = st_entry_style_changed;
   widget_class->navigate_focus = st_entry_navigate_focus;
 
@@ -1103,6 +1033,8 @@ st_entry_init (StEntry *entry)
 
   /* set cursor hidden until we receive focus */
   clutter_text_set_cursor_visible ((ClutterText *) priv->entry, FALSE);
+
+  clutter_actor_set_cursor_type (CLUTTER_ACTOR (entry), CLUTTER_CURSOR_TEXT);
 }
 
 /**
index b627490823c201ef7bb40ab0ad74755f7f8a5709..eb24942b4ce2ca3b2e1e3b48a66a234bbcb9c8be 100644 (file)
@@ -69,9 +69,4 @@ void            st_entry_set_hint_actor    (StEntry      *entry,
                                             ClutterActor *hint_actor);
 ClutterActor *  st_entry_get_hint_actor    (StEntry      *entry);
 
-typedef void (*StEntryCursorFunc) (StEntry *entry, gboolean use_ibeam, gpointer data);
-void            st_entry_set_cursor_func    (StEntryCursorFunc func,
-                                             gpointer          user_data);
-
 G_END_DECLS
-